import java.util.Scanner;

public class Test2 {
    private static int n;
    private static int m;
    private static int x;
    private static int y;
    private static final int[] xx = {0,1};
    private static final int[] yy = {1,0};
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            n = in.nextInt();
            m = in.nextInt();
            x = in.nextInt();
            y = in.nextInt();
            long[][] dp = new long[n+1][m+1];
            if (isBlocked(0, 0)) {
                System.out.println(0);
                continue;
            }
            dp[0][0] = 1l;
            for (int i = 0; i < n+1; i++) {
                for (int j = 0; j < m+1; j++) {
                    if (isBlocked(i, j)) {
                        continue;
                    }
                    if (i-1 >= 0) dp[i][j] += dp[i-1][j];
                    if (j-1 >= 0) dp[i][j] += dp[i][j-1];
                }
            }
            System.out.println(dp[n][m]);
        }
    }

    private static boolean isBlocked(int row, int col) {
        if ((row == x && col == y)
                || (row != x && col != y && (Math.abs(row-x) + Math.abs(col-y) == 3))) {
            return true;
        } else {
            return false;
        }
    }
}
